package com.zrrd.order;

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@MapperScan("com.zrrd.order.mapper")
@SpringBootApplication
public class OrderApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }
    /*
        RestTemplate类是springMvc中用来进行发送HTTP请求的一个客户端类。可以理解为是模拟浏览器发送http请求的效果(并不是)。
        用来发送不同类型的的HTTP请求，到指定个URI。并且接收和处理响应
     */
    /*
    1、注册一个RestTemplate的实例到Spring容器
     */
    @Bean
    @LoadBalanced
    /*
    该示例中通过 @LoadBalanced 注解标记了 RestTemplate Bean，使其具备负载均衡的能力。
    在使用 RestTemplate 发起请求时，将会根据负载均衡策略自动选择一个可用的服务实例来处理请求。
    如果使用 WebClient 进行服务调用，则可以在创建 WebClient Bean 时使用 @LoadBalanced 注解。
    需要注意的是，使用 @LoadBalanced 注解需要结合具体的负载均衡器和服务注册中心进行配置，以确保负载均衡能够正常工作。
     */
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }


    /*
    第1种方式：
    直接修改负载均衡的规则，
    以后当前服务无论调用那个微服务实例，都使用本规则。
        把IRule接口的实现类(eureka提供的负载均衡规则接口)作为Bean加载到IOC容器
     */
/*    @Bean
    public IRule getIRule(){
        return new RandomRule();//随机规则
    }*/

}